package com.yuelao.yuelao_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuelao.yuelao_backend.dto.UserDTO;
import com.yuelao.yuelao_backend.entity.UserFollow;

import java.util.List;
import java.util.Set;

public interface UserFollowService extends IService<UserFollow> {

    /**
     * 关注用户
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 是否成功
     */
    boolean followUser(Long followerId, Long followedId);

    /**
     * 取消关注用户
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 是否成功
     */
    boolean unfollowUser(Long followerId, Long followedId);

    /**
     * 获取用户的关注列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 关注的用户列表
     */
    List<UserDTO> getFollowingList(Long userId, int pageNum, int pageSize);

    /**
     * 获取用户的粉丝列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 粉丝列表
     */
    List<UserDTO> getFollowerList(Long userId, int pageNum, int pageSize);

    /**
     * 判断用户A是否关注了用户B
     * @param followerId 用户A的ID
     * @param followedId 用户B的ID
     * @return 是否关注
     */
    boolean isFollowing(Long followerId, Long followedId);

    /**
     * 统计用户的粉丝数量
     * @param userId 用户ID
     * @return 粉丝数量
     */
    long countFollowers(Long userId);

    /**
     * 批量查询用户A关注的用户ID集合（从给定的用户ID集合中筛选）
     * @param followerId 用户A的ID
     * @param targetUserIds 目标用户ID集合
     * @return 用户A关注的用户ID集合
     */
    Set<Long> getFollowedUserIds(Long followerId, Set<Long> targetUserIds);
}